package com.zmm.weblog.web.cglib;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

// 代理方式类，定义被代理方法的增强方式
// 该类实现InvocationHandler接口，重写invoke方法，定义方法的增强方式
public class ShoppingProxyJdkLib implements InvocationHandler {

    // 被代理对象
    private AppleJdkLib appleJdkLib;

    public ShoppingProxyJdkLib(AppleJdkLib appleJdkLib) {
        this.appleJdkLib = appleJdkLib;
    }

    /**
     * 定义原方法的增强方式
     *
     * @param proxy  被代理对象
     * @param method 被代理对象
     * @param args   被代理对象调用的方法时，传入的参数
     * @return 方法的返回值
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 被代理对象执行的方法名
        String name = method.getName();
        if ("sell".equals(name)) {
            // 增强参数
            double price = (double) args[0] * 0.9;
            // 执行方法
            Object result = method.invoke(appleJdkLib, price);
            // 增强返回值
            return result + "和充电头";
        } else if ("repair".equals(name)) {
            // 增强方法流程
            System.out.println("专属客服为你服务！");
            return method.invoke(appleJdkLib, args);
        } else {
            // 什么都不增强
            return method.invoke(name, args);
        }
    }
}